#region AppServices License

// Product: 
// AppServices
// http://appservices.codeplex.com
//
// Author:
// Pawel Idzikowski
// http://www.polenter.com
// mailto:idzikowski@polenter.com?subject=AppServices-Question
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the author(s) be held liable for any damages arising from
// the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
//    1. The origin of this software must not be misrepresented; you must not
//      claim that you wrote the original software. If you use this software
//      in a product, an acknowledgment in the product documentation would be
//      appreciated but is not required.
//
//    2. Altered source versions must be plainly marked as such, and must not
//      be misrepresented as being the original software.
//
//    3. This notice may not be removed or altered from any source distribution.

#endregion

using System;
using System.Windows.Forms;
using Polenter.Services;

namespace AppServicesHelloWorldApp.Services.Core
{
    public class DefaultTimer : ITimer
    {
        public event EventHandler TenSecondsElapsed;
        private readonly Timer _timer=new Timer();

        public DefaultTimer()
        {
            _timer.Start();
            _timer.Tick += new EventHandler(on_timer_Tick);
        }

        /// <summary>
        /// This service will be injected
        /// </summary>
        [Service]
        public ITimeProvider TimeProvider { get; set; }

        void on_timer_Tick(object sender, EventArgs e)
        {
            if (TimeProvider==null) return;
            var now = TimeProvider.GetTime();
            if (now.Second % 10 == 0)
            {
                // every 10 seconds invoke the event
                invokeTenSecondsElapsed(EventArgs.Empty);
            }
        }

        private void invokeTenSecondsElapsed(EventArgs e)
        {
            EventHandler handler = TenSecondsElapsed;
            if (handler != null) handler(this, e);
        }
    }
}